/**
 * 日志工具
 * 提供统一的日志记录功能
 */

import winston from 'winston';

// 获取日志级别
const logLevel = process.env.LOG_LEVEL || 'info';

// 创建日志格式
const logFormat = winston.format.combine(
  winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  winston.format.errors({ stack: true }),
  winston.format.splat(),
  winston.format.printf(({ level, message, timestamp, ...meta }) => {
    return `${timestamp} [${level.toUpperCase()}]: ${message} ${Object.keys(meta).length ? JSON.stringify(meta) : ''}`;
  })
);

// 创建日志记录器
export const logger = winston.createLogger({
  level: logLevel,
  format: logFormat,
  transports: [
    // 控制台输出
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        logFormat
      )
    }),
    // 文件输出
    new winston.transports.File({ 
      filename: 'logs/error.log', 
      level: 'error' 
    }),
    new winston.transports.File({ 
      filename: 'logs/combined.log' 
    })
  ]
});

/**
 * 创建带有上下文的日志记录器
 * @param context 日志上下文名称
 * @returns 日志记录器实例
 */
export function createContextLogger(context: string) {
  return {
    debug: (message: string, meta?: any) => logger.debug(`[${context}] ${message}`, meta),
    info: (message: string, meta?: any) => logger.info(`[${context}] ${message}`, meta),
    warn: (message: string, meta?: any) => logger.warn(`[${context}] ${message}`, meta),
    error: (message: string, meta?: any) => logger.error(`[${context}] ${message}`, meta)
  };
}